package com.qf.cosmetology.service.impl;

import com.qf.cosmetology.entity.Order;
import com.qf.cosmetology.dao.OrderDao;
import com.qf.cosmetology.result.ResponseCode;
import com.qf.cosmetology.result.ResponseData;
import com.qf.cosmetology.service.OrderService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import util.SmsUtil;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * (Order)表服务实现类
 *
 * @author makejava
 * @since 2021-06-22 11:15:36
 */
@Service("orderService")

public class OrderServiceImpl implements OrderService {
    @Resource
    private OrderDao orderDao;

    /**
     * 通过ID查询单条数据
     *
     * @param oId 主键
     * @return 实例对象
     */
    @Override
    public Order queryById(Integer oId) {
        return this.orderDao.queryById(oId);
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    @Override
    public List<Order> queryAllByLimit(int offset, int limit) {
        return this.orderDao.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     *
     * //进行业务逻辑的判定
     *         //事务：要么失败，要么成功，失败回滚到最初的数据，避免数据库数据脏数据
     *
     * @param order 实例对象
     * @return 实例对象
     */

    @Transactional//事务注解
    @Override
    public ResponseData insert(Order order) {

        //可能报错，使用try catch捕获异常
        //捕获异常，事务不能回滚
        //事务回滚方式
        //  1.Throw
        //  2.手动回滚  ransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        //            return  new ResponseData(ResponseCode.FAILED);
        //  3.
//        try{
//            order.setMessage("我在进行测试");
//            this.orderDao.insert(order);
//            int i=1/0;
//            return new ResponseData(ResponseCode.SUCCESS);
//        }catch (Exception e){
//            e.printStackTrace();
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//            return  new ResponseData(ResponseCode.FAILED);
//        }

        try{

            //判定手机号不为空
            if(order.getTel()!=null && order.getTel().equals("")){
                //发送手机短信
                String code= SmsUtil.sendMsg(order.getTel());
                if(code==null){
                    return new ResponseData("000401","请核对手机号");
                }
                //发送成功,手动设置后台
                order.setCode(code);
                order.setStatus(0);
                order.setSubtime(new Date());//date是util包下面的，而不是SQL包下面

                this.orderDao.insert(order);
                return new ResponseData(ResponseCode.SUCCESS);
            }
            return new ResponseData(ResponseCode.FAILED);

        }catch (Exception e){
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return new ResponseData(ResponseCode.FAILED);
        }

    }

    /**
     * 修改数据
     *
     * @param order 实例对象
     * @return 实例对象
     */
    @Override
    public Order update(Order order) {
        this.orderDao.update(order);
        return this.queryById(order.getOId());
    }

    /**
     * 通过主键删除数据
     *
     * @param oId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer oId) {
        return this.orderDao.deleteById(oId) > 0;
    }
}
